package com.sxbbc.common.core.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.function.common.RestResponse;
import com.sxbbc.common.basics.service.solr.entity.Solrpage;
import com.sxbbc.common.core.dto.jz.*;
import com.sxbbc.common.core.entity.jz.AppHomeRecommend;
import com.sxbbc.common.core.entity.jz.ProcMain;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sxbbc.common.core.service.system.solr.entity.SolrProductDto;
import com.sxbbc.common.core.utils.BasePage;

/**
 * <p>
 * 商品信息主表 服务类
 * </p>
 *
 * @author leehao
 * @since 2019-05-24
 */
public interface IProcMainService extends IService<ProcMain> {

    /**
     * 查询商品列表
     * @param page 分页对象
     * @param procMain 查询对象
     * @author leehao
     * @return 带分页的对象
     */
    IPage<ProcMain> queryProductList(BasePage<ProcMain> page, ProcMain procMain);

    /**
     * 根据产品编码获取ProcMain对象
     * @param proCode 产品编码
     * @author leehao
     * @return com.sxbbc.common.core.entity.jz.ProcMain
     */
    ProcMain selectOneByProCode(String proCode);

    /**
     * 查询推荐商品列表
     * @param page 分页
     * @param procMain 查询
     * @author leehao
     * @return vo对象
     */
    IPage<AppHomeRecommend> queryRecommendProc(BasePage<AppHomeRecommend> page, ProcMain procMain);

    /**
     * 新增商品
     * @param procMain 商品主表对象
     * @param product 其它必要信息封装对象
     * @author leehao
     * @return com.function.common.RestResponse
     */
    RestResponse addBusinessProduct(ProcMain procMain, ProductEditVo product);

    /**
     * 处理商品状态 上下架涉及到solr操作
     * @param procMain
     * @author leehao
     * @return com.function.common.RestResponse
     */
    RestResponse handleProductStatus(ProcMain procMain);

    /**
     * 批量处理商品上下架与审核
     * @param type 类型
     *             1 上架
     *             2 下架
     *             3 审核
     * @param ids 批量操作的ID
     * @author leehao
     * @return com.function.common.RestResponse
     */
    RestResponse handleProductStatusBatch(Integer type, String[] ids);

    /**
     * 搜索商品 solr
     * @param productVo 商品vo对象
     * @param cpage 页码 默认1
     * @param search 搜索vo
     *               sortType 排序类型
     *               sortDesc 升序降序
     * @author leehao
     * @return solr分页对象
     */
    Solrpage<SolrProductDto> queryProductListBySolr(ProductVo productVo, Integer cpage, SearchVo search);

    /**
     * 针对猜你喜欢-查询默认的商品列表
     * @param page 分页对象
     * @author leehao
     * @return 商品分页对象
     */
    IPage<ProcMain> queryDefaultProductList(BasePage<ProcMain> page);

    /**
     * 商品详情
     * @param productVo vo对象
     * @author leehao
     * @return com.sxbbc.common.core.dto.jz.ProductDetailVo
     */
    ProductDetailVo selectProductDetail(ProductVo productVo);

    /***
     * 附近商家商品详情
     * @param productVo
     * @return
     */
    ProductDetailVo selectProductSimpleDetail(ProductVo productVo);
    /**
     * 编辑商品
     * @param procMain 商品对象
     * @param productEditVo 商品辅助对象
     * @author leehao
     * @return com.function.common.RestResponse
     */
    RestResponse editBusinessProduct(ProcMain procMain, ProductEditVo productEditVo);

    /**
     * 处理删除运费模板后 对相应的商品进行下架处理
     * @param id 运费模板ID
     * @author leehao
     * @return java.lang.Boolean
     */
    Boolean handleProductStatusWithDeleteExp(Integer id);

    /**
     * 查询商家商品
     * @param procMain
     * @return
     * @author xiaoky
     */
	IPage<ProcMain> queryBusinessProduct(BasePage<ProcMain> page, ProcMain procMain);

    IPage<NearBusinessProlVo> queryNearBusinessProductList(BasePage<ProcMain> page, Integer bid, Integer firstId);


}
